package com.example.repository;

import java.util.Collection;
import java.util.List;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;

/**
 * Created by Chenjie on 2017/7/3.
 */
public interface BaseMongoDAO<T> {
    /**
     * 通过条件查询实体(集合)
     *
     * @param query
     */
    public List<T> find(Query query) ;

    /**
     * 通过一定的条件查询一个实体
     *
     * @param query
     * @return
     */
    public T findOne(Query query) ;

    /**
     * 通过条件查询更新数据
     *
     * @param query
     * @param update
     * @return
     */
    public T updateOne(Query query, Update update) ;

    /**
     * 更新多条记录
     *
     * @param query
     * @param update
     * @return
     */
    public int updateMulti(Query query, Update update);

    /**
     * 根据id，更新文档
     *
     * @param t
     */
    public void updateEntityById(T t);

    /**
     * 保存一个对象到mongodb
     *
     * @param entity
     * @return
     */
    public T save(T entity) ;

    /**
     * 保存多个对象
     *
     * @param lists
     * @return
     */
    public Collection<T> saveAll(Collection<T> lists);

    /**
     * 删除一个对象
     *
     * @param query
     * @return
     */
    public T removeOne(Query query);

    /**
     * 删除多个对象
     *
     * @param query
     * @return
     */
    public List<T> removeAll(Query query);

    /**
     * 通过ID获取记录
     *
     * @param id
     * @return
     */
    public T findById(String id) ;

    /**
     * 通过ID获取记录,并且指定了集合名(表的意思)
     *
     * @param id
     * @param collectionName
     *            集合名
     * @return
     */
    public T findById(String id, String collectionName) ;

    /**
     * 分页查询
     * @param page
     * @param query
     * @return
     */
    public Page<T> findPage(Page<T> page, Query query);

    /**
     * 求数据总和
     * @param query
     * @return
     */
    public long count(Query query);
}
